package org.fizz.ass.html;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/**
 * HTML文档
 * @author FIZZ
 * @version ass-1.0, 2014-4-17
 * @since 1.0
 */
public class AssHTMLDocument {

	/**
	 * HTML的doctype
	 */
	private String doctype;
	
	/**
	 * 所有的HTML元素都在这里<br>
	 * key: String,元素名(标签名)<br>
	 * value: List&lt;Element&gt; ,相同元素名的元素列表 
	 */
//	private Map<String, List<Element>> allElements;
	
	/**
	 * HTML文档的根元素,对用户是不可见的
	 */
	private Element rootElement;

	/**
	 * 构造一个HTML文档
	 * @param docType 
	 * @since 1.0
	 */
	public AssHTMLDocument(){
//		allElements = new HashMap<String, List<Element>>();
		rootElement = new Element("root");
	}
	
	/**
	 * 设置DOCTYPE
	 * @param doctype
	 * @since 1.0
	 */
	public void setDoctype(String doctype) {
		this.doctype = doctype;
	}



	/**
	 * 返回HTML的DOCTYPE
	 * @return HTML的DOCTYPE
	 * @since 1.0
	 */
	public String getDoctype() {
		return doctype;
	}
	
	/**
	 * 根据元素名称返回元素的列表
	 * @param eleName 元素名称
	 * @return 元素的列表，如果没有其中没有元素，则返回<tt>null<tt>
	 * @since 1.0
	 */
	public List<Element> getElementsByName(String  name){
//		List<Element> eles = allElements.get(name);
//		if(eles != null && eles.size() > 0){
//			return eles;
//		}
		
		List<Element> eles = new ArrayList<Element>();
		find(rootElement, eles, name);
		return eles;
	}
	
	private void find(Element parentElement,List<Element> eles, String name){
		Vector<Element> childEles = parentElement.getChildElements();
		if(childEles != null && childEles.size() != 0){
			for(Element ele : childEles){
				if(ele.getName().equalsIgnoreCase(name)){
					eles.add(ele);
				}
				find(ele, eles, name);
			}
		}
		
	}
	
	
	
	/**
	 * 添加一个元素
	 * @param element 要添加的元素
	 * @param parentElement 要添加的元素的父元素
	 * @since 1.0
	 */
	public void addElement(Element element, Element parentElement){
//		String eleName = element.getName();
//		List<Element> eles = allElements.get(eleName);
//		if(eles == null){
//			eles = new ArrayList<Element>();
//			allElements.put(eleName, eles);
//		}
//		allElements.get(eleName).add(element);
		if(parentElement != null){
			element.setParentElement(parentElement);
			parentElement.addChildElement(element);
		}else{//parentElement为空，向根元素中添加
			element.setParentElement(rootElement);
			rootElement.addChildElement(element);
		}
	}
	
	/**
	 * 添加一个注释消息
	 * @param commentText 注释消息
	 * @since 1.0
	 */
	public void addCommentElement(String commentText){
		
	}
	
	public void display(){
		rootElement.getFirstElement().displayElement();//HTML
		
//		//头部元素  Test 用
//		Element headEle = rootElement.getChildElements().get(0).getChildElementAt(0);
//		
//		System.out.println(headEle.getFirstElement());
	}
	
}
